#include <iostream>
#include "gdal/gdal.h"
#include "gdal/gdal_priv.h"
#include "gdal/cpl_conv.h"
#include "ogr_spatialref.h"
#include <iomanip>

int main() {
    // 注册GDAL
    GDALAllRegister();

    // 这个就是用来确定UTM区域的经纬度
    const double lon = 104.148762246928;  // 经度
    const double lat = 35.94176544537;   // 纬度

    // 创建WGS84坐标系统, 其实就是我们熟知的地球经纬度
    OGRSpatialReference wgs84SRS;
    wgs84SRS.importFromEPSG(4326);  // EPSG代码4326表示WGS84

    // 根据经度计算UTM区
    int utmZone = static_cast<int>((lon + 180.0) / 6.0) + 1;  // 根据经度计算UTM区
    std::cout << utmZone << std::endl;

    // 创建UTM坐标系统
    OGRSpatialReference utmSRS;
    utmSRS.importFromEPSG(32600 + utmZone);  // EPSG代码326xx表示UTM投影，xx是UTM区

    // 创建坐标转换对象
    OGRCoordinateTransformation* transformation = OGRCreateCoordinateTransformation(&wgs84SRS, &utmSRS);

    // 输入经度和纬度坐标
    double x = lon;
    double y = lat;

    // 执行坐标转换
    if (transformation && transformation->Transform(1, &x, &y) == TRUE) {
        std::cout << std::fixed << std::setprecision(8);
        std::cout << "UTM X: " << x << "  UTM Y: " << y << std::endl;
    } else {
        std::cerr << "坐标转换失败" << std::endl;
    } 
    
    
    /*
        计算其他经纬度相对于原点的坐标，就从这里开始，减掉x y就行了
    */

    


    // 释放坐标转换对象
    if (transformation) {
        OCTDestroyCoordinateTransformation(transformation);
    }

    // 关闭GDAL
    GDALDestroy();

    return 0;
}
